package com.hl.annotation.anno_value;

import com.hl.annotation.anno_value.service.UserService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * 测试 注解@Value 的四种用法
 *
 * 1. AppConfig
 *      @PropertySource 读取指定配置文件 spring.properties
 *      @ComponentScan  指定扫描路径 路径里的类如果有Bean注解，则自动创建，并添加到 spring 容器
 * 2. UserService
 *      @Component 自动创建 Bean 对象
 *      @Value("${xxx}") 自动注入 配置文件中的 key-value；如果不存在 则注入双引号里的字符串
 *          @Value("aaa")       写法一，普通字符串；     赋值 字符串
 *          @Value("${bbb}")    写法二，占位符；        注入的是外部配置文件对应的property，key-value对，或其他位置的变量
 *          @Value("#{ccc}")    写法三，SpEL表达式；    注入的是SpEL表达式对应的内容，可以是BeanName
 *          @Value("xxx")       写法四，用于扩展注解     使用注解的方式引入变量，如果在很多位置应用，方便修改
 * 2. 启动 spring 容器，创建 Bean
 * 3. 获取指定 Bean 对象（Java 对象），调用方法
 *
 * @author liuhuan
 */
public class Test {

    public static void main(String[] args) {
        // 启动一个 spring 容器，加载类 AppConfig
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

        UserService userService = applicationContext.getBean("userService", UserService.class);
        userService.test();
    }
}
